/**
 * 字符串辅助类
 * [帕斯卡命名、驼峰命名 、烤串命名、蛇形命名](https://blog.csdn.net/nickDaDa/article/details/117560415)
 * [四种命名介绍：驼峰、帕斯卡、蛇形、串形](https://blog.csdn.net/YopenLang/article/details/120424901)
 */
class EsString {
    /**
     * 帕斯卡命名 转换到 烤串命名（短横线命名）
     * OutOfMemoryException To Out-Of-Memory-Exception
     */
    static convertPascalToKebabCase(text) {
        return text.replace(/([A-Z])/g, (v, v2, i) => ((i == 0 ? '' : '-') + v.toLowerCase()));
    }
    /**
     * 帕斯卡命名 转换到 蛇形命名（下划线命名）
     * OutOfMemoryException To Out_Of_Memory_Exception
     */
    static convertPascalToSnakeCase(text) {
        return text.replace(/([A-Z])/g, (v, v2, i) => ((i == 0 ? '' : '_') + v.toLowerCase()));
    }
    /**
     * 蛇形命名 转换到 驼峰命名（首字母小写的驼峰命名法）
     * out_of_memory_exception To outOfMemoryException
     */
    static convertSnakeToCamelCase(text) {
        return text.split('_').filter(v => v).map((v, i) => i == 0 ? v : (v[0].toUpperCase() + v.substring(1))).join(''); 
    }
    /**
     * 蛇形命名 转换到 帕斯卡命名（首字母大写的驼峰命名法）
     * out_of_memory_exception To OutOfMemoryException
     */
    static convertSnakeToPascalCase(text) {
        return text.split('_').filter(v => v).map(v => v[0].toUpperCase() + v.substring(1)).join(''); 
    }
    /**
     * 蛇形命名 转换到 烤串命名（短横线命名）
     * out_of_memory_exception To OutOfMemoryException
     */
    static convertSnakeToKebabCase(text) {
        return text.replaceAll('_', '-');
    }
    /**
     * 把字符串中的首字符转换为大写
     */
    static ucFirst(text) {
        return text[0].toUpperCase() + text.substring(1);
    }
}

export default EsString;